﻿var fs = require('fs');
var path = require('path')
var filePath = path.join(__dirname,'input.txt')
var distPath = path.join(__dirname,'input3.txt')

// 版块1====================================
// let ws = fs.createWriteStream(distPath);
// var buffer = new Buffer('我也喜欢你');
// ws.write(buffer, 'utf8', function () {
//   console.log('写入完成，write方法回调函数没有参数')
// });

// //最后再写入的内容
// ws.end('再见');


// 版块2======使用流完成复制文件操作========================
// let rs = fs.createReadStream(filePath);
// let ws = fs.createWriteStream(distPath);
// rs.on('open',function(fd){
// 	console.log('要duqu的数据文件已经打开，文件描述符是： ' + fd);
// })

// // 读取数据后，写入数据
// rs.on('data',function(data){
// 	ws.write(data)
// })

// ws.on("open",function(fd){
//     console.log('要写入的数据文件已经打开，文件描述符是： ' + fd);
// })
// // 读取结束的时候，写入也结束
// rs.on('end',function(){
// 	ws.end('',function(){
// 		console.log("复制完成")
// 	})
// })

// ==第三个例子，=======================================

var rs = fs.createReadStream(__dirname + '/images/a.mp3');
var ws = fs.createWriteStream(__dirname + '/images/b.mp3');

rs.on('data', function (chunk) {
  // console.log(ws.write(chunk)  +"  ???")
  if (ws.write(chunk) === false) {
    rs.pause();
    console.log(1);
  }
});

rs.on('end',function () {
  ws.end();
  console.log(2);
});

// ws.write()方法返回为fasle时，会触发drain事件，事件里面的方法会进行。
// ws.write()方法返回为true时，则不会触发drain事件。
ws.on('drain', function () {
  rs.resume();
  console.log(3);
}) ;


// 版块3====================================

//关于WriteStream对象的write方法返回一个布尔类型，当缓存区中数据全部写满时，返回false;
//表示缓存区写满，并将立即输出到目标对象中
// var ws = fs.createWriteStream(distPath);
// for (var i = 0; i < 5000; i++) {
//   var w_flag = ws.write(i.toString());
//   //当缓存区写满时，输出false
//   console.log(w_flag);
// }







